package design.factory.abstractF;

public class AbstractFactoryTest2 {
    public static void main(String[] args) {
    }
}

//抽象产品1：提供了产品的接口
interface Product1 {
    public void show();
}
//抽象产品2：提供了产品的接口
interface Product2 {
    public void show();
}

//抽象工厂：提供了厂品的生成方法
interface AbstractFactory {
    public Product1 newProduct1();
    public Product2 newProduct2();
}

//具体工厂1：实现了厂品的生成方法
class ConcreteFactory1 implements AbstractFactory {
    public Product1 newProduct1() {
        System.out.println("具体工厂 1 生成-->具体产品 11...");
        return new ConcreteProduct11();
    }
    public Product2 newProduct2() {
        System.out.println("具体工厂 1 生成-->具体产品 12...");
        return new ConcreteProduct12();
    }
}
//具体工厂2：实现了厂品的生成方法
class ConcreteFactory2 implements AbstractFactory {
    public Product1 newProduct1() {
        System.out.println("具体工厂 2 生成-->具体产品 21...");
        return new ConcreteProduct21();
    }
    public Product2 newProduct2() {
        System.out.println("具体工厂 2 生成-->具体产品 22...");
        return new ConcreteProduct22();
    }
}

//具体产品11：实现抽象产品中的抽象方法
class ConcreteProduct11 implements Product1 {
    public void show() {
        System.out.println("具体工厂1-产品1显示...");
    }
}
//具体产品21：实现抽象产品中的抽象方法
class ConcreteProduct12 implements Product2 {
    public void show() {
        System.out.println("具体工厂1-产品2显示...");
    }
}

//具体产品21：实现抽象产品中的抽象方法
class ConcreteProduct21 implements Product1 {
    public void show() {
        System.out.println("具体工厂2-产品1显示...");
    }
}

//具体产品12：实现抽象产品中的抽象方法
class ConcreteProduct22 implements Product2 {
    public void show() {
        System.out.println("具体工厂2-产品2显示...");
    }
}
